package com.turbo.cloud.calc.entity;

import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author zhangluning
 */
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
public class RepayPlanModel {

    /**
     * 期次
     */
    private Integer termNum;
    /**
     * 当期应还日期
     */
    private LocalDateTime shouldRepayDate;
    /**
     * 当期应还本金
     */
    private BigDecimal shouldRepayPrincipalAmt;
    /**
     * 当期应还利息
     */
    private BigDecimal shouldRepayInterestAmt;
    /**
     * 当期应还费用
     */
    private BigDecimal shouldRepayFeeAmt;
    /**
     * 当期应还费用2,备用预留其它费用
     */
    private BigDecimal shouldRepayFeeSecAmt;
    /**
     * 当期应还本息 当期应还本息=当期应还本金+当期应还利息
     */
    private BigDecimal shouldRepayPrinciInterAmt;
    /**
     * 应还违约金,考虑提前还款违约的情况
     */
    private BigDecimal shouldRepayDamageAmt;
    /**
     * 当期应还本金罚息
     */
    private BigDecimal shouldRepayPrincipalPenaltyAmt;
    /**
     * 当期应还利息罚息
     */
    private BigDecimal shouldRepayInterestPenaltyAmt;
    /**
     * 当期应还罚息=当期应还本金罚息+当期应还利息罚息
     */
    private BigDecimal shouldRepayPenaltyAmt;
    /**
     * 当期应还借款金额 应还借款金额=应还本息+应还费用1+应还费用2+应还罚息+应还违约金
     */
    private BigDecimal shouldRepayAmt;
    /**
     * 实还日期
     */
    private LocalDateTime realRepayDate;
    /**
     * 记账日期
     */
    private LocalDateTime chargeRepayDate;
    /**
     * 当期实还本金
     */
    private BigDecimal realRepayPrincipalAmt;
    /**
     * 当期实还利息
     */
    private BigDecimal realRepayInterestAmt;
    /**
     * 当期实还费用
     */
    private BigDecimal realRepayFeeAmt;
    /**
     * 当期实还费用2,备用预留其它费用
     */
    private BigDecimal realRepayFeeSecAmt;
    /**
     * 当期实还本息 当期实还本息=当期实还本金+当期实还利息
     */
    private BigDecimal realRepayPrincInterAmt;
    /**
     * 实还违约金，考虑提前还款违约的情况
     */
    private BigDecimal realRepayDamageAmt;
    /**
     * 当期实还本金罚息
     */
    private BigDecimal realRepayPrincipalPenaltyAmt;
    /**
     * 当期实还利息罚息
     */
    private BigDecimal realRepayInterestPenaltyAmt;
    /**
     * 当期实还罚息=当期实还本金罚息+当期实还利息罚息
     */
    private BigDecimal realRepayPenaltyAmt;
    /**
     * 当期实还借款金额 实还借款金额=当期实还本息+当期实还罚息+实还费用1+实还费用2+实还违约金
     */
    private BigDecimal realRepayAmt;
    /**
     * 贴息金额
     */
    private BigDecimal discountInterestAmt;
    /**
     * 已抵扣/减免金额
     */
    private BigDecimal otherKillAmt;

    /**
     * 拖欠标志,1:未逾期 2:逾期 3:待转逾期
     */
    private String overdueId;
    /**
     * 逾期天数
     */
    private Integer overdueDay;
    /**
     * 还款标志 	1:未还款 2:部分还款 3:正常还款 4:提前还款 5:逾期还款 6:核销收回还款
     * <p>
     * * Normal 正常
     * * Settle 结清
     * * GracePeriod 宽限期
     * * OverDue 逾期
     * * AdvanceSettle 提前结清
     * * Prepayment 提前还款
     */
    private String repayStateId;
    /**
     * 当期未偿还本金余额=当期应还本金-当期实还本金
     */
    private BigDecimal unliquidatedPrincipalAmt;
    /**
     * 当期未偿还利息余额=当期应还利息-当期实还利息
     */
    private BigDecimal unliquidatedInterestAmt;
    /**
     * 当期未偿还本金利息余额=剩余未还本金+剩余未还利息
     */
    private BigDecimal unliquidatedPrincipalIntersetAmt;
    /**
     * 当期未偿还借款额=当期应还借款金额-当期实还借款额-贴息金额-已抵扣
     */
    private BigDecimal unliquidatedAmt;
    /**
     * 还款渠道,渠道中文名称：“云贷代扣”、“翼支付白条”、“颂车”、“客户主动还款”、“客户线下还款”、 以及支付平台返回还款渠道的中文名称。
     */
    private String channel;

    /**
     * 记账日期(兼容设计冗余字段)，不要相信英文字母含义！！！
     */
    private LocalDateTime actualDate;
    /**
     * 实还日期(兼容设计冗余字段)，不要相信英文字母含义！！！
     */
    private LocalDateTime billDate;

    /**
     * 反应各期当时的本金余额（非当期本金余额）
     * 各期当时的本金余额 = 总期次的本金和 - 到达此期次的已还本金和
     * 假设有3期
     * 第1期 1000 已还本 500  各期当时的本金余额=2500  3000-500
     * 第2期 1000 已还本 0    各期当时的本金余额=2500  3000-500-0
     * 第3期 1000 已还本 0    各期当时的本金余额=2500  3000-500-0-0
     * ----------------------------------------------------------------
     * 第1期 1000 已还本 1000  各期当时的本金余额=2000  3000-1000
     * 第2期 1000 已还本 500   各期当时的本金余额=1500  3000-1000-500
     * 第3期 1000 已还本 0     各期当时的本金余额=1500  3000-1000-500-0
     */
    private BigDecimal principalBalanceAmt;
}
